package 中等.双指针;

/**
 * 给定一个非负整数 c ，你要判断是否存在两个整数 a 和 b，使得 a2 + b2 = c
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/sum-of-square-numbers/
 */
public class 平方数之和_633 {

    public static void main(String[] args) {

        System.out.println(judgeSquareSum(4));

    }

    //双指针，b的最大值为，根号下c，所以右边界可以缩小
    public static boolean judgeSquareSum(int c) {
        //使用long类型，避免溢出
        long right = (long) Math.sqrt(c), left = 0;
        while (right >= left) {
            if (left * left + right * right == c) {
                return true;
            } else if (left * left + right * right > c) {
                right--;
            } else {
                left++;
            }
        }
        return false;
    }

}
